//第一步：安装
//第二步：引入并声明使用
//第三步：必须往外暴露一个路由器对象
//第四步：必须在main文件当中Vue的配置对象里面注入你的路由器对象
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
Vue.use(VueRouter)

//先把原来的push方法保存起来
const originPush = VueRouter.prototype.push
const originReplace = VueRouter.prototype.replace
//把原来的push修改为另外一个方法
VueRouter.prototype.push = function(location,resolved,rejected){
  if(resolved === undefined && rejected === undefined){
    return originPush.call(this,location).catch(() => {})
  }else{
    return originPush.call(this,location,resolved,rejected)
  }
}

VueRouter.prototype.replace = function(location,resolved,rejected){
  if(resolved === undefined && rejected === undefined){
    return originReplace.call(this,location).catch(() => {})
  }else{
    return originReplace.call(this,location,resolved,rejected)
  }
}

const router = new VueRouter({
  mode:'history',
  routes,
  scrollBehavior (to, from, savedPosition) {
    return { x: 0, y: 0 }
  }
})

// 全局前置路由导航守卫（token校验、根据token获取用户信息、权限控制）
// router.beforeEach(async (to, from, next) => {
//   // to  代表的是目的地的路由对象
//   // from 代表的是起始页面的路由对象
//   // next 代表的是一个函数，可以控制你是放行还是处理
//   // next()  如果不传参代表无条件放行
//   // next(false) 如果传递false代表不放行，原地待命
//   // next('/') 如果传递的是一个路径或者是路由对象，那么可以强制让路由跳转到指定的位置

//   //token校验的逻辑
//   //一会用户信息是要在这里面进行发请求获取的，因此要先把根据token获取用户信息的api和store写好
//   let token = store.state.user.token
//   let userInfo = store.state.user.userInfo
//   if(token){
//     //token存在代表用户登录过
//     if(to.path === '/login'){
//       // 代表用户登录之后又去登录页,强制跳转到首页
//       next('/')
//     }else{
//       // 代表用户登录了但是这次不是去的登录页
//       if(userInfo.name){
//         next()
//       }else{
//         try {
//           //获取用户信息成功
//           await store.dispatch('getUserInfo')
//           next()
//         } catch (error) {
//           //代表获取用户信息失败,一概归结为token过期
//           // 先清空token
//           // state.xxx = 'xxx' 这样的写法不能在这里写，vuex的数据必须通过mutation直接修改
//           await store.dispatch('removeToken')
//           next('/login')
//         }
//       }
//     }
//   }else{
//     //代表token不存在，用户没登录过
//     next() //目前我们先无条件放行，后面我们做了支付等功能完成后再回来限定它
//     // let targetPath = to.path
//     // if(targetPath.indexOf('/trade') === 0 || targetPath.startsWith('/center')|| targetPath.startsWith('/pay')){
//     //   next('/login?redirect='+targetPath)
//     // }else{
//     //   next()
//     // }
//   }

// })

export default router

